home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / fax / src / port / svr4 / flock.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  626b  |  32 lines

  1. /* flock emulation for System V using fcntl
  2.  *
  3.  * flock is just mapped to fcntl 
  4.  */
  5.  
  6. #include <unistd.h>
  7. #include <fcntl.h>
  8. #include <errno.h>
  9.  
  10. #include "port.h"
  11.  
  12. int
  13. flock(int fd, int operation)
  14. {
  15.     struct flock flock;
  16.     int r;
  17.     
  18.     memset(&flock, '\0', sizeof(flock));
  19.     if (operation & LOCK_EX)
  20.     flock.l_type = F_WRLCK;
  21.     else if (operation & LOCK_SH)
  22.     flock.l_type = F_RDLCK;
  23.     else
  24.     flock.l_type = F_UNLCK;
  25.     flock.l_whence = SEEK_SET;
  26.     
  27.     if (((r=fcntl(fd, (operation & LOCK_NB) ? F_SETLK:F_SETLKW, &flock)) == -1)
  28.         && (errno == EACCES || errno == EAGAIN))
  29.             errno = EWOULDBLOCK;
  30.     return r;
  31. }
  32.